package br.com.friendzoone.postagem;

import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

import br.com.friendzoone.modelo.binario.RecursoBinario;
import br.com.friendzoone.modelo.postagem.Postagem;
import br.com.friendzoone.recursos.RecursosFaces;
import br.com.friendzoone.solr.util.AbstractBean;
import br.com.friendzoone.solr.util.ValidacaoException;
import br.com.friendzoone.util.Pages;

@ManagedBean
@ViewScoped
public class PostagemHome extends RecursosFaces implements Pages {

	private Postagem postagem = new Postagem();

	private RecursoBinario recursoBinario = new RecursoBinario();

	public Postagem getPostagem() {
		return postagem;
	}

	public void setPostagem(Postagem postagem) {
		this.postagem = postagem;
	}

	public RecursoBinario getRecursoBinario() {
		return recursoBinario;
	}

	public void setRecursoBinario(RecursoBinario recursoBinario) {
		this.recursoBinario = recursoBinario;
	}

	public PostagemHome() {

	}

	public String postar() throws ValidacaoException {

		// Grava o recuros binario primeiro
		final AbstractBean<RecursoBinario> service = new AbstractBean<RecursoBinario>();
		recursoBinario.setData(new Date());
		RecursoBinario recursoBinarioNovo = service.salvar(recursoBinario);

		final PostagemSolr postagemSolr = new PostagemSolr();
		postagem.setData(new Date());
		postagem.getRecursoBinario().setId(recursoBinarioNovo.getId());
		postagem.getPostador().setId(this.getUsuarioLogado().getId());
		postagemSolr.salvar(postagem);

		this.adicionarMensagem(this.getMensagemProperties("requisicao.sucesso"));

		return VIEW_POSTAGEM;

	}

	public List<Postagem> getPostagens() {

		final PostagemSolr postagemSolr = new PostagemSolr();

		final Postagem postagem = new Postagem();
		postagem.getPostador().setId(this.getUsuarioLogado().getId());

		final List<Postagem> postagens = postagemSolr.listar(Postagem.class, postagem);
		return postagens;
	}

	public void handleFileUpload(final FileUploadEvent event) {
		final UploadedFile item = event.getFile();

		recursoBinario.setDados(item.getContents());

		FacesMessage msg = new FacesMessage("Post ", event.getFile().getFileName() + " carregado.");
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}
}
